<?php

class RemoteDocumentCache extends ContentController 
{
	var $sourceFileMustExists = false;
	var $sourceBaseUrl = null;
	var $command = 'docs';
	var $protocol = 'http';
	function RemoteDocumentCache( $sourceBaseUrl )
	{
		if ( $sourceBaseUrl )
		{
			$this->sourceBaseUrl = $this->_normalizeUrl( $sourceBaseUrl );
		}
	}
	function _acceptRequest ()
	{
		if ( ! $this->sourceBaseUrl ) return false;
		return parent::_acceptRequest ();
	}
	function _normalizeUrl ( $url )
	{
		$url = trim( $url );
		if ( strpos ( strtolower( $url ), strtolower( $this->protocol.'://') ) !== 0 )
		{
			$url = $this->protocol.'://';
		}
		$url = rtrim( $url, '/');
		return $url;
	}
	function generateFile ()
	{
		$tokens = $this->tokens;
		array_shift( $tokens );
		$query = join( '/', $tokens ).'/'.basename( $this->sourceFile );		
		$file = file_get_contents( $this->sourceBaseUrl.'/'.$query  );
		if ( !$file ) return false;
		$file = '<pre>'.htmlentities( $file ).'</pre>';
		$result = file_put_contents( $this->destinationFile, $file );
		return $result;
	}	
}
//=========== COMPAT

if (!defined('FILE_USE_INCLUDE_PATH')) {
    define('FILE_USE_INCLUDE_PATH', 1);
}

if (!defined('FILE_APPEND')) {
    define('FILE_APPEND', 8);
}


/**
 * Replace file_put_contents()
 *
 * @category    PHP
 * @package     PHP_Compat
 * @link        http://php.net/function.file_put_contents
 * @author      Aidan Lister <aidan@php.net>
 * @version     $Revision: 1.1 $
 * @internal    resource_context is not supported
 * @since       PHP 5
 * @require     PHP 4.0.1 (trigger_error)
 */
if (!function_exists('file_put_contents')) {
    function file_put_contents($filename, $content, $flags = null, $resource_context = null)
    {
        // If $content is an array, convert it to a string
        if (is_array($content)) {
            $content = implode('', $content);
        }

        // If we don't have a string, throw an error
        if (!is_scalar($content)) {
            trigger_error('file_put_contents() The 2nd parameter should be either a string or an array', E_USER_WARNING);
            return false;
        }

        // Get the length of date to write
        $length = strlen($content);

        // Check what mode we are using
        $mode = ($flags & FILE_APPEND) ?
                    $mode = 'a' :
                    $mode = 'w';

        // Check if we're using the include path
        $use_inc_path = ($flags & FILE_USE_INCLUDE_PATH) ?
                    true :
                    false;

        // Open the file for writing
        if (($fh = @fopen($filename, $mode, $use_inc_path)) === false) {
            trigger_error('file_put_contents() failed to open stream: Permission denied', E_USER_WARNING);
            return false;
        }

        // Write to the file
        $bytes = 0;
        if (($bytes = @fwrite($fh, $content)) === false) {
            $errormsg = sprintf('file_put_contents() Failed to write %d bytes to %s',
                            $length,
                            $filename);
            trigger_error($errormsg, E_USER_WARNING);
            return false;
        }

        // Close the handle
        @fclose($fh);

        // Check all the data was written
        if ($bytes != $length) {
            $errormsg = sprintf('file_put_contents() Only %d of %d bytes written, possibly out of free disk space.',
                            $bytes,
                            $length);
            trigger_error($errormsg, E_USER_WARNING);
            return false;
        }

        // Return length
        return $bytes;
    }
}

?>